/**
 * 密码相关校验类
 */

/**
 * 修改密码时加密
 * @param {String} val 输入的密码
 * @param {String} key 后台约定
 */
export function Encryption(inStr, key = "t") {
  let res = "";
  for (let i = 0; i < inStr.length; i++) {
    let k = null;
    if (i > key.length - 1) {
      k = i % key.length;
    } else {
      k = i;
    }
    res += String.fromCharCode(inStr.charCodeAt(i) ^ key.charCodeAt(k));
  }
  return res;
}

/**
 * 验证密码强度
 * @param {String} value 输入的密码
 */
export function ValidStrength(value) {
  let res = 0;

  // 密码不能少于6位
  if (!value || value.length < 6) {
    return res;
  }

  if (/^\S*(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])\S*$/.test(value) && /^[A-z\d]*$/.test(value)) {
    // 是否数字和大小写字母组合
    res = 2;
  } else if (/^\S*(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])(?=\S*[!@#$%^&*? ])\S*$/.test(value)) {
    // 是否数字字母同时特殊字符
    res = 3;
  } else {
    res = 1;
  }

  return res;
}

/**
 * 验证密码长度
 * @param {String} value 输入的密码
 */
export const passwordVerification = (rule, value) => {
  const reg = /^\S*(?=\S{6,})\S*$/;
  if (rule.required) {
    if (value) {
      if (!reg.test(value)) {
        return Promise.reject(new Error("密码长度至少6位"));
      } else {
        return Promise.resolve();
      }
    } else {
      return Promise.reject(new Error("密码不能为空"));
    }
  } else {
    if (!!value && !reg.test(value)) {
      return Promise.reject(new Error("密码长度至少6位"));
    } else {
      return Promise.resolve();
    }
  }
};
